package cn.edu.lcu.cs.javateaching.clazz;

import java.util.Random;

/**
 * 随机数演示
 * 
 * @author Ling
 *
 */
public class RandomDemo {

	/**
	 * 生成指定范围、指定数量的随机数序列
	 * 
	 * @param low 左边界，闭区间
	 * @param high 右边界，开区间
	 * @param length 随机数的个数
	 * @return
	 */
	public static int[] randomIntsWithStream(int low, int high, int length) {
		Random random = new Random();
		return random.ints(low, high).limit(length).toArray();
	}

	/**
	 * 用动态的种子生成随机数数组
	 * 
	 * @param length
	 * @return
	 */
	public static int[] randomIntsWithDynamicSeed(int length) {
		// Random类生成的不是真正的随机数，而是伪随机数
		// 如果随机数种子不同，生成的随机数序列也就不同
//		Random random = new Random(System.currentTimeMillis());

		// Random() 的实现已经采用系统时间作为种子，所以每次种子都不同
		// public Random() { this(seedUniquifier() ^ System.nanoTime()); }
		Random random = new Random();

		int[] buffer = new int[length];
		for (int i = 0; i < buffer.length; i++) {
			buffer[i] = random.nextInt();
		}
		return buffer;
	}

	/**
	 * 用固定的种子生成随机数数组
	 * 
	 * @param length
	 * @return
	 */
	public static int[] randomIntsWithFixSeed(int length) {
		// Random类生成的不是真正的随机数，而是伪随机数
		// 如果随机数种子固定，每次生成的随机数序列也会相同
		Random random = new Random(0);

		int[] buffer = new int[length];
		for (int i = 0; i < buffer.length; i++) {
			buffer[i] = random.nextInt();
		}
		return buffer;
	}

}
